#ifndef SQUAREWAVEVIEW_H
#define SQUAREWAVEVIEW_H

#include <QWidget>
#include <QChartView>
#include <QLineSeries>
#include <QLegend>
#include <QScreen>
#include <QMessageBox>
#include <vector>
#include <QColorDialog>
#include <QFontDialog>
#include <QScrollArea>
#include <QValueAxis>
#include <QDebug>

using namespace QtCharts;

#include "../base/baseview.h"

namespace Ui {
class SquareWaveView;
}

class SquareWaveView : public BaseView
{
    Q_OBJECT

public:
    explicit SquareWaveView(QWidget *parent = nullptr);

    QLineSeries* createSeries(const std::vector<std::pair<float,float>>& dataPoints); // 创建曲线
    QLineSeries* createGridSeries(float minX,float maxX); // 创建额定值曲线

    virtual void init() override;

    ~SquareWaveView() override;
private:
    std::vector<float> splitStr2Vec(const QString& str); // 将用;分隔的数字字符串分割并转换成数字

    void initAxisTool(); // 选择坐标轴后工具坐标轴属性初始化工具栏

    QValueAxis* createAxis(float min,float max); // 创建坐标轴，并返回创建的坐标轴

    // 根据输入的x、y数据，生成 (时间点,电压值) 数据
    std::vector<std::pair<float,float>> getDataPoints(const std::vector<float>& xData,const std::vector<float>& yData);

public slots:
    // 用于工具栏的显示和隐藏
    void onSetDataBtnClicked();
    void onSetAxisBtnClicked();
    void onSetSeriesBtnClicked();

    // 第一个工具栏
    void onCreateSeriesBtnClicked(); // 创建序列按钮
    void onSetSeriesColorBtnClicked(); // 设置序列的颜色
    void onDelSeriesBtnClicked(); // 删除曲线

    // 第二个工具栏
    void onIsDataPointShowChecked(bool isChecked); // 设置数据点标签是否可见
    void onSetDataPointLabColorBtnClicked(); // 设置数据点标签颜色
    void onSetDataPointLabFontBtnClicked(); // 设置数据点标签字体
    void onIsLegendVisibleChecked(bool isChecked); // 设置图例是否可见
    void onxyPointBtnChecked(); // 设置数据点格式为xy
    void onyPointBtnChecked(); // 设置数据点格式为y

    // 第三个工具栏
    void onAxisBtnClicked(); // x、y轴的radiobutton被clicked后的处理函数
    void onSetAxisNameBtnClicked(); // 设置坐标轴名称
    void onSetTickColorBtnClicked(); // 设置主刻度线颜色
    void onSetMinorTickColorBtnClicked(); // 设置次刻度线颜色
    void onAxisUpSpinBoxChanged(int value); // 设置坐标轴上限
    void onAxisDownSpinBoxChanged(int value); // 设置坐标轴下限
    void onSetTickSpinBoxChanged(int value); // 设置坐标轴主刻度线
    void onSetMinorTickSpinBoxChanged(int value); // 设置坐标轴次刻度线

private:
    Ui::SquareWaveView *ui;
    QChart* m_chart;
    QLineSeries* m_series{nullptr}; // 数据值曲线
    QLineSeries* m_gridSeries{nullptr}; // 额定值曲线
    float m_gridVal{0.0}; // 额定值
    QValueAxis* m_axis; // 坐标轴
};

#endif // SQUAREWAVEVIEW_H
